package com.xinsoft.exception;

import com.xinsoft.common.ServerResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 异常处理器
 *
 * @author Li
 * @version 1.0.0
 * @createdate 2019/1/2
 */
@RestControllerAdvice
public class MyExceptionHandler {

    @Value("${spring.profiles.active}")
    private String env;

    private Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * 自定义业务异常 异常处理
     * @Description 不需要打印错误日志，直接返回前端
     * @param e:
     * @Author Uyuhz
     * @Date 2021/4/2 14:48
     * @return cn.o.baseline.common.utils.R
     */
    @ExceptionHandler(MyException.class)
    public ServerResponse handleMyException(MyException e) {
        ServerResponse r = new ServerResponse();
        return r;
    }

//    /**
//     * 接口路径不存在 异常处理
//     * @Description 暂时先打印错误日志
//     * @param e:
//     * @Author Uyuhz
//     * @Date 2021/4/2 14:48
//     * @return cn.o.baseline.common.utils.R
//     */
//    @ExceptionHandler(NoHandlerFoundException.class)
//    public ServerResponse handlerNoFoundException(Exception e) {
//        logger.error("路径不存在，请检查路径是否正确", e);
//        return ServerResponse.error(404, "路径不存在，请检查路径是否正确");
//    }
//
//    /**
//     * 数据主键重复 异常处理
//     * @Description 需要打印错误日志
//     * @param e:
//     * @Author Uyuhz
//     * @Date 2021/4/2 14:45
//     * @return cn.o.baseline.common.utils.R
//     */
//    @ExceptionHandler(DuplicateKeyException.class)
//    public R handleDuplicateKeyException(DuplicateKeyException e) {
//        logger.error("数据库中已存在该记录", e);
//        return R.error("数据库中已存在该记录");
//    }
//
//
//    /**
//     * 方法参数校验 异常处理
//     * @Description 不需要打印错误日志
//     * @author: chenzh
//     * @date 2021/3/22 14:36
//     * @return cn.o.baseline.common.utils.R
//     * @param e  异常
//     */
//    @ExceptionHandler(BindException.class)
//    public R handleBindException(BindException e) {
//        return R.error(e.getAllErrors().get(0).getDefaultMessage());
//    }
//
//   /**
//    * 方法参数校验 异常处理
//    * @Description 不需要打印错误日志
//    * @author: chenzh
//    * @date 2021/3/22 14:36
//    * @return cn.o.baseline.common.utils.R
//    * @param e  异常
//    */
//    @ExceptionHandler(MethodArgumentNotValidException.class)
//    public R handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
//        FieldError fieldError = e.getBindingResult().getFieldError();
//        if(fieldError!=null){
//            return R.error(fieldError.getDefaultMessage());
//        }
//        return R.error();
//    }
//
//    /******************************* 非业务异常 **************************/
//
//    /**
//     * 未匹配异常 最终处理
//     * @Description 需要打印错误日志
//     *              生产环境请勿返回具体异常信息
//     * @Author Uyuhz
//     * @Date 2021/4/2 14:42
//     * @return cn.o.baseline.common.utils.R
//     */
//    @ExceptionHandler(Exception.class)
//    public R handleException(Exception e) {
//        logger.error("系统异常", e);
//        // 生产环境请勿返回异常信息
//        if (StrUtil.equals(env, "prod")) {
//            return R.error("系统异常，请联系管理员");
//        }
//        if (e instanceof JSONException) {
//            return R.error("阿里规约json转换异常--" + e.getMessage());
//        }
//        if (e instanceof HttpMessageNotReadableException) {
//            return R.error("参数序列或反序列异常--" + e.getMessage());
//        }
//        return R.error(e.getMessage());
//    }
}
